//奇怪的是，只有三个数字可以被写成它们各位数的四次方之和：
//        注：对于 1 = 1^4 由于并不是一个和，所以不包括在内。
//        1634 = 1^4 + 6^4 + 3^4 + 4^4
//        8208 = 8^4 + 2^4 + 0^4 + 8^4
//        9474 = 9^4 + 4^4 + 7^4 + 4^4
//        上面三个数的和 1634 + 8208 + 9474 = 19316
//        找出所有能被写成各位数字五次方之和的数之和。
//        答案：443839
public class Week030 {
    static int pow(int base, int b) {
        int result = 1;
        for (; b != 0; b >>= 1, base *= base) {
            if ((b & 1) == 1) {
                result *= base;
            }
        }
        return result;
    }

    static long digitSum(int n) {
        int result = 0;
        while (n != 0) {
            result += pow(n % 10, 5);
            n /= 10;
        }
        return result;
    }

    static void run() {
        int ans = 0;
        for (int cur = 10; cur <= 1000000; ++cur) {
            if (cur == digitSum(cur)) {
                ans += cur;
            }
        }
        System.out.println(ans);
    }

    public static void main(String[] args) {
        long startTime = System.nanoTime();
        run();
        System.out.println("\n程序运行时间：" + (System.nanoTime() - startTime) + "ns.");
    }
}
